package org.example.config;

/**
 * @description:
 * @author: 谢超
 * @date: 2024/8/27 11:16
 */

import lombok.Data;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @description: 自定义消息队列配置，用于更新订单状态
 * @author: 谢超
 * @date: 2024/8/8 16:03
 */
@Configuration
@Data
public class RabbitUpdateOrderMQConfig {

    /**
     * 交换机
     */
    private final String orderEventExchange = "orderUpdate.event.exchange";

    /**
     * 更新订单队列
     */
    private final String orderUpdateQueue = "order.update.queue";

    /**
     * 订单发放流量包队列
     */
    private final String orderTrafficQueue = "order.traffic.queue";

    /**
     * 微信回调发送通知的routingKey，发送消息用的
     */
    private final String orderUpdateTrafficRoutingKey = "order.update.traffic.routing.key";

    /**
     * 订单队列和交换机的绑定
     */
    private final String orderUpdateBindingKey = "order.update.*.routing.key";

    /**
     * 流量包发放队列和交换机的绑定
     */
    private final String orderTrafficBindingKey = "order.*.traffic.routing.key";

    /**
     * 订单更新队列和交换机建立绑定关系
     * @return
     */
    @Bean
    public Binding orderUpdateBinding(){
        return new Binding(orderUpdateQueue, Binding.DestinationType.QUEUE, orderEventExchange, orderUpdateBindingKey, null);
    }

    /**
     * 发放流量包队列 和 交换机建立绑定关系
     * @return
     */
    @Bean
    public Binding orderTrafficBinding(){
        return new Binding(orderTrafficQueue, Binding.DestinationType.QUEUE, orderEventExchange, orderTrafficBindingKey, null);
    }

    /**
     * 更新订单队列，普通队列，用于被监听消费
     * @return
     */
    @Bean
    public Queue orderUpdateQueue(){
        return new Queue(orderUpdateQueue, true, false, false);
    }

    /**
     * 发放流量包  订单队列，普通队列，用于被监听消费
     * @return
     */
    @Bean
    public Queue orderTrafficQueue(){
        return new Queue(orderTrafficQueue, true, false, false);
    }
}
